// Copyright 2019 The rhyme_lph Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// f [author] rhyme_lph
// v [email]  rhymelph@gmail.com
// F [github] https://github.com/rhymelph

import 'package:base_plugin/base_plugin.dart';
import 'package:finance_app/src/entities/bank_detail_record_item_entity.dart';
import 'package:finance_app/src/entities/cpf_contribution_entity.dart';
import 'package:finance_app/src/entities/custom_expense_data.dart';
import 'package:finance_app/src/entities/fixed_asset_entity.dart';
import 'package:finance_app/src/entities/format/service_and_product_entity.dart';
import 'package:finance_app/src/entities/role_permission_entity.dart';
import 'package:finance_app/src/entities/sub_billing_item_entity.dart';
import 'package:finance_app/src/page/ace_virtual_assistant/chat_room_page.dart';
import 'package:finance_app/src/page/ace_virtual_assistant/notification_page.dart';
import 'package:finance_app/src/page/all_reports/age/age_select_filter_page.dart';
import 'package:finance_app/src/page/all_reports/all_reports_page.dart';
import 'package:finance_app/src/page/all_reports/bank_reconciliation/bank_reconciliation_page.dart';
import 'package:finance_app/src/page/all_reports/bank_reconciliation/bank_reconciliation_detail_with_file_page.dart';
import 'package:finance_app/src/page/all_reports/bank_reconciliation/reconcile_account_confirm_page.dart';
import 'package:finance_app/src/page/all_reports/bank_reconciliation/reconcile_account_detail_page.dart';
import 'package:finance_app/src/page/all_reports/bank_reconciliation/reconcile_account_record_detail_page.dart';
import 'package:finance_app/src/page/all_reports/date_report_page.dart';
import 'package:finance_app/src/page/all_reports/fixed_asset/disposal_of_fixed_asset_page.dart';
import 'package:finance_app/src/page/all_reports/fixed_asset/fixed_asset_page.dart';
import 'package:finance_app/src/page/all_reports/fixed_asset/linked_expense_page.dart';
import 'package:finance_app/src/page/all_reports/fixed_asset/new_fixed_asset_page.dart';
import 'package:finance_app/src/page/all_reports/fixed_asset/sales_of_fixed_asset_page.dart';
import 'package:finance_app/src/page/all_reports/journal/account_amount_page.dart';
import 'package:finance_app/src/page/all_reports/journal/accounts_select_page.dart';
import 'package:finance_app/src/page/all_reports/journal/new_journal_entry_page.dart';
import 'package:finance_app/src/page/bar_code_camera_page.dart';
import 'package:finance_app/src/page/camera/edit_photo_page.dart';
import 'package:finance_app/src/page/camera/review_photo_page.dart';
import 'package:finance_app/src/page/camera/select_photo_page.dart';
import 'package:finance_app/src/page/dashboard/amount_gst/amount_gst_rate_category_page.dart';
import 'package:finance_app/src/page/dashboard/contact/contact_data_import_page.dart';
import 'package:finance_app/src/page/dashboard/credit_debit/item_amount_page.dart';
import 'package:finance_app/src/page/dashboard/bank/add_bank_account_page.dart';
import 'package:finance_app/src/page/dashboard/bank/all_payment_page.dart';
import 'package:finance_app/src/page/dashboard/bank/bank_account_page.dart';
import 'package:finance_app/src/page/dashboard/bank/cash_and_bank_page.dart';
import 'package:finance_app/src/page/dashboard/bank/new_account_transfer_page.dart';
import 'package:finance_app/src/page/dashboard/bill/add_payment_page.dart';
import 'package:finance_app/src/page/dashboard/bill/bill_number_page.dart';
import 'package:finance_app/src/page/dashboard/bill/bill_see_payment_page.dart';
import 'package:finance_app/src/page/dashboard/bill/new_bill_page.dart';
import 'package:finance_app/src/page/dashboard/cash_in/new_cash_in_page.dart';
import 'package:finance_app/src/page/dashboard/cash_in/select_grant_page.dart';
import 'package:finance_app/src/page/dashboard/cash_out/new_cash_out_page.dart';
import 'package:finance_app/src/page/dashboard/contact/all_contacts_page.dart';
import 'package:finance_app/src/page/dashboard/contact/business_contact_detail_page.dart';
import 'package:finance_app/src/page/dashboard/contact/business_contact_profile_page.dart';
import 'package:finance_app/src/page/dashboard/contact/business_contacts_page.dart';
import 'package:finance_app/src/page/dashboard/contact/delete_business_contact_page.dart';
import 'package:finance_app/src/page/dashboard/contact/employee_contacts_page.dart';
import 'package:finance_app/src/page/dashboard/contact/main_business_contact_page.dart';
import 'package:finance_app/src/page/dashboard/contact/new_contact_person_page.dart';
import 'package:finance_app/src/page/dashboard/contact/statement_of_account_page.dart';
import 'package:finance_app/src/page/dashboard/credit_debit/credit_debit_page.dart';
import 'package:finance_app/src/page/dashboard/credit_debit/select_item_page.dart';
import 'package:finance_app/src/page/dashboard/credit_note/credit_note_number_page.dart';
import 'package:finance_app/src/page/dashboard/credit_note/delete_credit_note_page.dart';
import 'package:finance_app/src/page/dashboard/credit_note/new_credit_note_page.dart';
import 'package:finance_app/src/page/dashboard/debit_note/delete_debit_note_page.dart';
import 'package:finance_app/src/page/dashboard/debit_note/new_debit_note_page.dart';
import 'package:finance_app/src/page/dashboard/delivery/delivery_order_page.dart';
import 'package:finance_app/src/page/dashboard/expense/new_expense_page.dart';
import 'package:finance_app/src/page/dashboard/invoice/invoice_number_page.dart';
import 'package:finance_app/src/page/dashboard/invoice/new_invoice_page.dart';
import 'package:finance_app/src/page/dashboard/invoice/record_payment_page.dart';
import 'package:finance_app/src/page/dashboard/payment/select_transaction_purpose_page.dart';
import 'package:finance_app/src/page/dashboard/products_services/adjust_inventory_list_page.dart';
import 'package:finance_app/src/page/dashboard/products_services/adjust_inventory_page.dart';
import 'package:finance_app/src/page/dashboard/products_services/batch_products_and_services_page.dart';
import 'package:finance_app/src/page/dashboard/products_services/data_import_page.dart';
import 'package:finance_app/src/page/dashboard/products_services/inventory_adjustment_page.dart';
import 'package:finance_app/src/page/dashboard/products_services/linked_products_page.dart';
import 'package:finance_app/src/page/dashboard/products_services/linked_services_page.dart';
import 'package:finance_app/src/page/dashboard/products_services/new_product_page.dart';
import 'package:finance_app/src/page/dashboard/products_services/new_service_page.dart';
import 'package:finance_app/src/page/dashboard/products_services/product_bom_list_page.dart';
import 'package:finance_app/src/page/dashboard/products_services/products_and_services_category_page.dart';
import 'package:finance_app/src/page/dashboard/products_services/products_and_services_page.dart';
import 'package:finance_app/src/page/dashboard/products_services/products_and_services_data_import_page.dart';
import 'package:finance_app/src/page/dashboard/products_services/quantity_page.dart';
import 'package:finance_app/src/page/dashboard/purchase/new_purchase_order_page.dart';
import 'package:finance_app/src/page/dashboard/purchase/purchase_order_number_page.dart';
import 'package:finance_app/src/page/dashboard/purchase/purchases_page.dart';
import 'package:finance_app/src/page/dashboard/quotation/new_quotation_page.dart';
import 'package:finance_app/src/page/dashboard/quotation/quotation_number_page.dart';
import 'package:finance_app/src/page/dashboard/sales/sales_page.dart';
import 'package:finance_app/src/page/dashboard/select/select_category_page.dart';
import 'package:finance_app/src/page/dashboard/transaction/all_transactions_page.dart';
import 'package:finance_app/src/page/dashboard_page.dart';
import 'package:finance_app/src/page/hr_payroll/duplicate_as_new_page.dart';
import 'package:finance_app/src/page/hr_payroll/employee/employee_batch_select_page.dart';
import 'package:finance_app/src/page/hr_payroll/employee/new_employee_page.dart';
import 'package:finance_app/src/page/hr_payroll/employee/select_income_type_page.dart';
import 'package:finance_app/src/page/hr_payroll/employee/select_working_day_page.dart';
import 'package:finance_app/src/page/hr_payroll/hr_and_payroll_data_import_page.dart';
import 'package:finance_app/src/page/hr_payroll/hr_and_payroll_page.dart';
import 'package:finance_app/src/page/hr_payroll/leave/leave_adjustment_page.dart';
import 'package:finance_app/src/page/hr_payroll/leave/leave_operation_page.dart';
import 'package:finance_app/src/page/hr_payroll/leave/new_leave_page.dart';
import 'package:finance_app/src/page/hr_payroll/leave/select_adjustment_leave_type_page.dart';
import 'package:finance_app/src/page/hr_payroll/leave/select_leave_type_page.dart';
import 'package:finance_app/src/page/hr_payroll/mark_as_resigned_page.dart';
import 'package:finance_app/src/page/hr_payroll/payroll/leave_details_page.dart';
import 'package:finance_app/src/page/hr_payroll/payroll/payroll_delete_page.dart';
import 'package:finance_app/src/page/hr_payroll/payroll/payroll_detail_page.dart';
import 'package:finance_app/src/page/hr_payroll/payroll/payroll_payment_page.dart';
import 'package:finance_app/src/page/hr_payroll/payroll/record_cpf_contribution_page.dart';
import 'package:finance_app/src/page/hr_payroll/payroll/set_salary_period_page.dart';
import 'package:finance_app/src/page/hr_payroll/reimburse/reimburse_approve_page.dart';
import 'package:finance_app/src/page/invite_team/assign_role_by_batch_page.dart';
import 'package:finance_app/src/page/invite_team/invite_team_members_page.dart';
import 'package:finance_app/src/page/invite_team/manage_role_access_page.dart';
import 'package:finance_app/src/page/invite_team/new_role_page.dart';
import 'package:finance_app/src/page/login/change_password_page.dart';
import 'package:finance_app/src/page/login/create_account_page.dart';
import 'package:finance_app/src/page/login/create_business_profile_page.dart';
import 'package:finance_app/src/page/login/forgot_password_page.dart';
import 'package:finance_app/src/page/login/login_page.dart';
import 'package:finance_app/src/page/login/pending_invitation_page.dart';
import 'package:finance_app/src/page/login/register_page.dart';
import 'package:finance_app/src/page/login/request_free_demo_page.dart';
import 'package:finance_app/src/page/login/set_new_password_page.dart';
import 'package:finance_app/src/page/login/update_email_page.dart';
import 'package:finance_app/src/page/login/update_phone_number_page.dart';
import 'package:finance_app/src/page/o_c_r_camera_page.dart';
import 'package:finance_app/src/page/setting/account/new_account_page.dart';
import 'package:finance_app/src/page/setting/account/set_opening_balance_page.dart';
import 'package:finance_app/src/page/setting/account_settings_page.dart';
import 'package:finance_app/src/page/setting/chart_of_accounts_page.dart';
import 'package:finance_app/src/page/setting/company_profile_page.dart';
import 'package:finance_app/src/page/setting/dataimport/setting_data_import_page.dart';
import 'package:finance_app/src/page/setting/dataimport/setting_data_import_summary_page.dart';
import 'package:finance_app/src/page/setting/gst_page.dart';
import 'package:finance_app/src/page/setting/industry_select_page.dart';
import 'package:finance_app/src/page/setting/preference/number_format_info_page.dart';
import 'package:finance_app/src/page/setting/preference/number_format_page.dart';
import 'package:finance_app/src/page/setting/preference/template_style_detail_page.dart';
import 'package:finance_app/src/page/setting/preference/template_style_page.dart';
import 'package:finance_app/src/page/setting/preference/unit_of_measurement_page.dart';
import 'package:finance_app/src/page/setting/preferences_page.dart';
import 'package:finance_app/src/page/setting/setting_page.dart';
import 'package:finance_app/src/page/setting/subscription/sub_add_credit_card_page.dart';
import 'package:finance_app/src/page/setting/subscription/sub_company_page.dart';
import 'package:finance_app/src/page/setting/subscription/sub_invoice_page.dart';
import 'package:finance_app/src/page/setting/subscription/sub_pay_page.dart';
import 'package:finance_app/src/page/setting/subscription/sub_payment_method_manager_page.dart';
import 'package:finance_app/src/page/setting/subscription/sub_payment_page.dart';
import 'package:finance_app/src/page/setting/subscription_page.dart';
import 'package:finance_app/src/page/splash_second_page.dart';
import 'package:finance_app/src/page/system_detection_page.dart';
import 'package:finance_app/src/page/web_view_page.dart';
import 'package:finance_app/src/provider/ace_virtual_assistant/chat_room_provider.dart';
import 'package:finance_app/src/provider/ace_virtual_assistant/notification_provider.dart';
import 'package:finance_app/src/provider/all_reports/age/age_select_filter_provider.dart';
import 'package:finance_app/src/provider/all_reports/all_reports_provider.dart';
import 'package:finance_app/src/provider/all_reports/bank_reconciliation/bank_reconciliation_provider.dart';
import 'package:finance_app/src/provider/all_reports/bank_reconciliation/bank_reconciliation_detail_with_file_provider.dart';
import 'package:finance_app/src/provider/all_reports/bank_reconciliation/reconcile_account_confirm_provider.dart';
import 'package:finance_app/src/provider/all_reports/bank_reconciliation/reconcile_account_detail_provider.dart';
import 'package:finance_app/src/provider/all_reports/bank_reconciliation/reconcile_account_record_detail_provider.dart';
import 'package:finance_app/src/provider/all_reports/date_report_provider.dart';
import 'package:finance_app/src/provider/all_reports/fixed_asset/disposal_of_fixed_asset_provider.dart';
import 'package:finance_app/src/provider/all_reports/fixed_asset/fixed_asset_provider.dart';
import 'package:finance_app/src/provider/all_reports/fixed_asset/linked_expense_provider.dart';
import 'package:finance_app/src/provider/all_reports/fixed_asset/new_fixed_asset_provider.dart';
import 'package:finance_app/src/provider/all_reports/fixed_asset/sales_of_fixed_asset_provider.dart';
import 'package:finance_app/src/provider/all_reports/journal/account_amount_provider.dart';
import 'package:finance_app/src/provider/all_reports/journal/accounts_select_provider.dart';
import 'package:finance_app/src/provider/all_reports/journal/new_journal_entry_provider.dart';
import 'package:finance_app/src/provider/bar_code_camera_provider.dart';
import 'package:finance_app/src/provider/camera/edit_photo_provider.dart';
import 'package:finance_app/src/provider/camera/review_photo_provider.dart';
import 'package:finance_app/src/provider/camera/select_photo_provider.dart';
import 'package:finance_app/src/provider/dashboard/amount_gst/amount_gst_rate_category_provider.dart';
import 'package:finance_app/src/provider/dashboard/contact/contact_data_import_provider.dart';
import 'package:finance_app/src/provider/dashboard/credit_debit/item_amount_provider.dart';
import 'package:finance_app/src/provider/dashboard/bank/add_bank_account_provider.dart';
import 'package:finance_app/src/provider/dashboard/bank/all_payment_provider.dart';
import 'package:finance_app/src/provider/dashboard/bank/bank_account_provider.dart';
import 'package:finance_app/src/provider/dashboard/bank/cash_and_bank_provider.dart';
import 'package:finance_app/src/provider/dashboard/bank/new_account_transfer_provider.dart';
import 'package:finance_app/src/provider/dashboard/bill/add_payment_provider.dart';
import 'package:finance_app/src/provider/dashboard/bill/bill_number_provider.dart';
import 'package:finance_app/src/provider/dashboard/bill/new_bill_provider.dart';
import 'package:finance_app/src/provider/dashboard/bill/see_payment_provider.dart';
import 'package:finance_app/src/provider/dashboard/cash_in/new_cash_in_provider.dart';
import 'package:finance_app/src/provider/dashboard/cash_in/select_grant_provider.dart';
import 'package:finance_app/src/provider/dashboard/cash_out/new_cash_out_provider.dart';
import 'package:finance_app/src/provider/dashboard/contact/all_contacts_provider.dart';
import 'package:finance_app/src/provider/dashboard/contact/business_contact_detail_provider.dart';
import 'package:finance_app/src/provider/dashboard/contact/business_contact_profile_provider.dart';
import 'package:finance_app/src/provider/dashboard/contact/business_contacts_provider.dart';
import 'package:finance_app/src/provider/dashboard/contact/delete_business_contact_provider.dart';
import 'package:finance_app/src/provider/dashboard/contact/employee_contacts_provider.dart';
import 'package:finance_app/src/provider/dashboard/contact/main_business_contact_provider.dart';
import 'package:finance_app/src/provider/dashboard/contact/new_contact_person_provider.dart';
import 'package:finance_app/src/provider/dashboard/contact/statement_of_account_provider.dart';
import 'package:finance_app/src/provider/dashboard/credit_debit/credit_debit_provider.dart';
import 'package:finance_app/src/provider/dashboard/credit_debit/select_item_provider.dart';
import 'package:finance_app/src/provider/dashboard/credit_note/credit_note_number_provider.dart';
import 'package:finance_app/src/provider/dashboard/credit_note/delete_credit_note_provider.dart';
import 'package:finance_app/src/provider/dashboard/credit_note/new_credit_note_provider.dart';
import 'package:finance_app/src/provider/dashboard/data_import/setting_data_import_provider.dart';
import 'package:finance_app/src/provider/dashboard/data_import/setting_dataimport_summary_provider.dart';
import 'package:finance_app/src/provider/dashboard/debit_note/delete_debit_note_provider.dart';
import 'package:finance_app/src/provider/dashboard/debit_note/new_debit_note_provider.dart';
import 'package:finance_app/src/provider/dashboard/delivery/delivery_order_provider.dart';
import 'package:finance_app/src/provider/dashboard/expense/new_expense_provider.dart';
import 'package:finance_app/src/provider/dashboard/invoice/invoice_number_provider.dart';
import 'package:finance_app/src/provider/dashboard/invoice/new_invoice_provider.dart';
import 'package:finance_app/src/provider/dashboard/invoice/record_payment_provider.dart';
import 'package:finance_app/src/provider/dashboard/payment/select_transaction_purpose_provider.dart';
import 'package:finance_app/src/provider/dashboard/products_services/data_import_provider.dart';
import 'package:finance_app/src/provider/dashboard/products_services/adjust_inventory_list_provider.dart';
import 'package:finance_app/src/provider/dashboard/products_services/adjust_inventory_provider.dart';
import 'package:finance_app/src/provider/dashboard/products_services/batch_products_and_services_provider.dart';
import 'package:finance_app/src/provider/dashboard/products_services/inventory_adjustment_provider.dart';
import 'package:finance_app/src/provider/dashboard/products_services/linked_products_provider.dart';
import 'package:finance_app/src/provider/dashboard/products_services/linked_services_provider.dart';
import 'package:finance_app/src/provider/dashboard/products_services/new_product_provider.dart';
import 'package:finance_app/src/provider/dashboard/products_services/new_service_provider.dart';
import 'package:finance_app/src/provider/dashboard/products_services/product_bom_list_provider.dart';
import 'package:finance_app/src/provider/dashboard/products_services/products_and_services_category_provider.dart';
import 'package:finance_app/src/provider/dashboard/products_services/products_and_services_provider.dart';
import 'package:finance_app/src/provider/dashboard/products_services/products_services_data_import_provider.dart';
import 'package:finance_app/src/provider/dashboard/products_services/quantity_provider.dart';
import 'package:finance_app/src/provider/dashboard/purchase/new_purchase_order_provider.dart';
import 'package:finance_app/src/provider/dashboard/purchase/purchase_order_number_provider.dart';
import 'package:finance_app/src/provider/dashboard/purchase/purchases_provider.dart';
import 'package:finance_app/src/provider/dashboard/quotation/new_quotation_provider.dart';
import 'package:finance_app/src/provider/dashboard/quotation/quotation_number_provider.dart';
import 'package:finance_app/src/provider/dashboard/sales/sales_provider.dart';
import 'package:finance_app/src/provider/dashboard/select/select_category_provider.dart';
import 'package:finance_app/src/provider/dashboard/transaction/all_transactions_provider.dart';
import 'package:finance_app/src/provider/dashboard_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/duplicate_as_new_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/employee/employee_batch_select_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/employee/new_employee_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/employee/select_income_type_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/employee/select_working_day_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/hr_and_payroll_data_import_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/hr_and_payroll_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/leave/leave_adjustment_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/leave/leave_operation_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/leave/new_leave_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/leave/select_adjustment_leave_type_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/leave/select_leave_type_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/mark_as_resigned_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/payroll/leave_details_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/payroll/payroll_delete_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/payroll/payroll_detail_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/payroll/payroll_payment_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/payroll/record_cpf_contribution_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/payroll/set_salary_period_provider.dart';
import 'package:finance_app/src/provider/hr_payroll/reimburse/reimburse_approve_provider.dart';
import 'package:finance_app/src/provider/invite_team/assign_role_by_batch_provider.dart';
import 'package:finance_app/src/provider/invite_team/invite_team_members_provider.dart';
import 'package:finance_app/src/provider/invite_team/manage_role_access_provider.dart';
import 'package:finance_app/src/provider/invite_team/new_role_provider.dart';
import 'package:finance_app/src/provider/login/change_password_provider.dart';
import 'package:finance_app/src/provider/login/create_account_provider.dart';
import 'package:finance_app/src/provider/login/create_business_profile_provider.dart';
import 'package:finance_app/src/provider/login/forgot_password_provider.dart';
import 'package:finance_app/src/provider/login/login_provider.dart';
import 'package:finance_app/src/provider/login/pending_invitation_provider.dart';
import 'package:finance_app/src/provider/login/register_provider.dart';
import 'package:finance_app/src/provider/login/request_free_demo_provider.dart';
import 'package:finance_app/src/provider/login/set_new_password_provider.dart';
import 'package:finance_app/src/provider/login/update_email_provider.dart';
import 'package:finance_app/src/provider/login/update_phone_number_provider.dart';
import 'package:finance_app/src/provider/o_c_r_camera_provider.dart';
import 'package:finance_app/src/provider/setting/account/new_account_provider.dart';
import 'package:finance_app/src/provider/setting/account/set_opening_balance_provider.dart';
import 'package:finance_app/src/provider/setting/account_settings_provider.dart';
import 'package:finance_app/src/provider/setting/chart_of_accounts_provider.dart';
import 'package:finance_app/src/provider/setting/company_profile_provider.dart';
import 'package:finance_app/src/provider/setting/gst_provider.dart';
import 'package:finance_app/src/provider/setting/industry_select_provider.dart';
import 'package:finance_app/src/provider/setting/preference/number_format_info_provider.dart';
import 'package:finance_app/src/provider/setting/preference/number_format_provider.dart';
import 'package:finance_app/src/provider/setting/preference/template_style_detail_provider.dart';
import 'package:finance_app/src/provider/setting/preference/template_style_provider.dart';
import 'package:finance_app/src/provider/setting/preference/unit_of_measurement_provider.dart';
import 'package:finance_app/src/provider/setting/preferences_provider.dart';
import 'package:finance_app/src/provider/setting/setting_provider.dart';
import 'package:finance_app/src/provider/setting/subscription/sub_add_credit_card_provider.dart';
import 'package:finance_app/src/provider/setting/subscription/sub_company_provider.dart';
import 'package:finance_app/src/provider/setting/subscription/sub_invoice_provider.dart';
import 'package:finance_app/src/provider/setting/subscription/sub_pay_provider.dart';
import 'package:finance_app/src/provider/setting/subscription/sub_payment_method_manager_provider.dart';
import 'package:finance_app/src/provider/setting/subscription/sub_payment_provider.dart';
import 'package:finance_app/src/provider/setting/subscription_provider.dart';
import 'package:finance_app/src/provider/splash_second_provider.dart';
import 'package:finance_app/src/provider/system_detection_provider.dart';
import 'package:finance_app/src/provider/web_view_provider.dart';

class RouterGenProviders extends IRoutesProvider {
  static final loginPage = '/src/page/login/login_page.dart';
  static final registerPage = '/src/page/login/register_page.dart';
  static final createAccountPage = '/src/page/login/create_account_page.dart';
  static final changePasswordPage = '/src/page/login/change_password_page.dart';
  static final forgotPasswordPage = '/src/page/login/forgot_password_page.dart';
  static final setNewPasswordPage = '/src/page/login/set_new_password_page.dart';
  static final pendingInvitationPage = '/src/page/login/pending_invitation_page.dart';
  static final updatePhoneNumberPage = '/src/page/login/update_phone_number_page.dart';
  static final updateEmailPage = '/src/page/login/update_email_page.dart';
  static final createBusinessProfilePage = '/src/page/login/create_business_profile_page.dart';
  static final editPhotoPage = '/src/page/camera/edit_photo_page.dart';
  static final reviewPhotoPage = '/src/page/camera/review_photo_page.dart';
  static final selectPhotoPage = '/src/page/camera/select_photo_page.dart';
  static final newAccountPage = '/src/page/setting/account/new_account_page.dart';
  static final setOpeningBalancePage = '/src/page/setting/account/set_opening_balance_page.dart';
  static final numberFormatPage = '/src/page/setting/preference/number_format_page.dart';
  static final templateStylePage = '/src/page/setting/preference/template_style_page.dart';
  static final numberFormatInfoPage = '/src/page/setting/preference/number_format_info_page.dart';
  static final unitOfMeasurementPage = '/src/page/setting/preference/unit_of_measurement_page.dart';
  static final templateStyleDetailPage = '/src/page/setting/preference/template_style_detail_page.dart';
  static final subPayPage = '/src/page/setting/subscription/sub_pay_page.dart';
  static final subInvoicePage = '/src/page/setting/subscription/sub_invoice_page.dart';
  static final subPaymentPage = '/src/page/setting/subscription/sub_payment_page.dart';
  static final subCompanyPage = '/src/page/setting/subscription/sub_company_page.dart';
  static final subAddCreditCardPage = '/src/page/setting/subscription/sub_add_credit_card_page.dart';
  static final subPaymentMethodManagerPage = '/src/page/setting/subscription/sub_payment_method_manager_page.dart';
  static final gstPage = '/src/page/setting/gst_page.dart';
  static final settingPage = '/src/page/setting/setting_page.dart';
  static final preferencesPage = '/src/page/setting/preferences_page.dart';
  static final subscriptionPage = '/src/page/setting/subscription_page.dart';
  static final companyProfilePage = '/src/page/setting/company_profile_page.dart';
  static final industrySelectPage = '/src/page/setting/industry_select_page.dart';
  static final accountSettingsPage = '/src/page/setting/account_settings_page.dart';
  static final chartOfAccountsPage = '/src/page/setting/chart_of_accounts_page.dart';
  static final allPaymentPage = '/src/page/dashboard/bank/all_payment_page.dart';
  static final bankAccountPage = '/src/page/dashboard/bank/bank_account_page.dart';
  static final cashAndBankPage = '/src/page/dashboard/bank/cash_and_bank_page.dart';
  static final addBankAccountPage = '/src/page/dashboard/bank/add_bank_account_page.dart';
  static final newAccountTransferPage = '/src/page/dashboard/bank/new_account_transfer_page.dart';
  static final newBillPage = '/src/page/dashboard/bill/new_bill_page.dart';
  static final addPaymentPage = '/src/page/dashboard/bill/add_payment_page.dart';
  static final billNumberPage = '/src/page/dashboard/bill/bill_number_page.dart';
  static final seePaymentPage = '/src/page/dashboard/bill/bill_see_payment_page.dart';
  static final salesPage = '/src/page/dashboard/sales/sales_page.dart';
  static final selectCategoryPage = '/src/page/dashboard/select/select_category_page.dart';
  static final newCashInPage = '/src/page/dashboard/cash_in/new_cash_in_page.dart';
  static final selectGrantPage = '/src/page/dashboard/cash_in/select_grant_page.dart';
  static final allContactsPage = '/src/page/dashboard/contact/all_contacts_page.dart';
  static final businessContactsPage = '/src/page/dashboard/contact/business_contacts_page.dart';
  static final employeeContactsPage = '/src/page/dashboard/contact/employee_contacts_page.dart';
  static final newContactPersonPage = '/src/page/dashboard/contact/new_contact_person_page.dart';
  static final mainBusinessContactPage = '/src/page/dashboard/contact/main_business_contact_page.dart';
  static final businessContactDetailPage = '/src/page/dashboard/contact/business_contact_detail_page.dart';
  static final deleteBusinessContactPage = '/src/page/dashboard/contact/delete_business_contact_page.dart';
  static final importBusinessContactPage = '/src/page/dashboard/contact/contact_data_import_page.dart';
  static final businessContactProfilePage = '/src/page/dashboard/contact/business_contact_profile_page.dart';
  static final statementOfAccountPage = '/src/page/dashboard/contact/statement_of_account_page.dart';
  static final newExpensePage = '/src/page/dashboard/expense/new_expense_page.dart';
  static final newInvoicePage = '/src/page/dashboard/invoice/new_invoice_page.dart';
  static final invoiceNumberPage = '/src/page/dashboard/invoice/invoice_number_page.dart';
  static final recordPaymentPage = '/src/page/dashboard/invoice/record_payment_page.dart';
  static final selectTransactionPurposePage = '/src/page/dashboard/payment/select_transaction_purpose_page.dart';
  static final newCashOutPage = '/src/page/dashboard/cash_out/new_cash_out_page.dart';
  static final deliveryOrderPage = '/src/page/dashboard/delivery/delivery_order_page.dart';
  static final purchasesPage = '/src/page/dashboard/purchase/purchases_page.dart';
  static final newPurchaseOrderPage = '/src/page/dashboard/purchase/new_purchase_order_page.dart';
  static final purchaseOrderNumberPage = '/src/page/dashboard/purchase/purchase_order_number_page.dart';
  static final newQuotationPage = '/src/page/dashboard/quotation/new_quotation_page.dart';
  static final quotationNumberPage = '/src/page/dashboard/quotation/quotation_number_page.dart';
  static final amountGstRateCategoryPage = '/src/page/dashboard/amount_gst/amount_gst_rate_category_page.dart';
  static final itemAmountPage = '/src/page/dashboard/credit_debit/item_amount_page.dart';
  static final creditDebitPage = 'src/page/dashboard/credit_debit/select_item_page.dart';
  static final selectItemPage = 'src/page/dashboard/credit_debit/credit_debit_page.dart';
  static final newDebitNotePage = '/src/page/dashboard/debit_note/new_debit_note_page.dart';
  static final newCreditNotePage = '/src/page/dashboard/credit_note/new_credit_note_page.dart';
  static final creditNoteNumberPage = '/src/page/dashboard/credit_note/credit_note_number_page.dart';
  static final deleteCreditNotePage = '/src/page/dashboard/credit_note/delete_credit_note_page.dart';
  static final deleteDebitNotePage = '/src/page/dashboard/debit_note/delete_debit_note_page.dart';
  static final allTransactionsPage = '/src/page/dashboard/transaction/all_transactions_page.dart';
  static final quantityPage = '/src/page/dashboard/products_services/quantity_page.dart';
  static final newProductPage = '/src/page/dashboard/products_services/new_product_page.dart';
  static final newServicePage = '/src/page/dashboard/products_services/new_service_page.dart';
  static final linkedProductsPage = '/src/page/dashboard/products_services/linked_products_page.dart';
  static final linkedServicesPage = '/src/page/dashboard/products_services/linked_services_page.dart';
  static final adjustInventoryPage = '/src/page/dashboard/products_services/adjust_inventory_page.dart';
  static final productBomListPage = '/src/page/dashboard/products_services/product_bom_list_page.dart';
  static final inventoryAdjustmentPage = '/src/page/dashboard/products_services/inventory_adjustment_page.dart';
  static final adjustInventoryListPage = '/src/page/dashboard/products_services/adjust_inventory_list_page.dart';
  static final productsAndServicesPage = '/src/page/dashboard/products_services/products_and_services_page.dart';
  static final batchProductsAndServicesPage = '/src/page/dashboard/products_services/batch_products_and_services_page.dart';
  static final productsAndServicesCategoryPage = '/src/page/dashboard/products_services/products_and_services_category_page.dart';
  static final newLeavePage = '/src/page/hr_payroll/leave/new_leave_page.dart';
  static final leaveOperationPage = '/src/page/hr_payroll/leave/leave_operation_page.dart';
  static final leaveAdjustmentPage = '/src/page/hr_payroll/leave/leave_adjustment_page.dart';
  static final selectLeaveTypePage = '/src/page/hr_payroll/leave/select_leave_type_page.dart';
  static final selectAdjustmentLeaveTypePage = '/src/page/hr_payroll/leave/select_adjustment_leave_type_page.dart';
  static final leaveDetailsPage = '/src/page/hr_payroll/payroll/leave_details_page.dart';
  static final payrollDeletePage = '/src/page/hr_payroll/payroll/payroll_delete_page.dart';
  static final payrollDetailPage = '/src/page/hr_payroll/payroll/payroll_detail_page.dart';
  static final payrollPaymentPage = '/src/page/hr_payroll/payroll/payroll_payment_page.dart';
  static final setSalaryPeriodPage = '/src/page/hr_payroll/payroll/set_salary_period_page.dart';
  static final recordCpfContributionPage = '/src/page/hr_payroll/payroll/record_cpf_contribution_page.dart';
  static final newEmployeePage = '/src/page/hr_payroll/employee/new_employee_page.dart';
  static final selectIncomeTypePage = '/src/page/hr_payroll/employee/select_income_type_page.dart';
  static final selectWorkingDayPage = '/src/page/hr_payroll/employee/select_working_day_page.dart';
  static final employeeBatchSelectPage = '/src/page/hr_payroll/employee/employee_batch_select_page.dart';
  static final reimburseApprovePage = '/src/page/hr_payroll/reimburse/reimburse_approve_page.dart';
  static final hrAndPayrollPage = '/src/page/hr_payroll/hr_and_payroll_page.dart';
  static final duplicateAsNewPage = '/src/page/hr_payroll/duplicate_as_new_page.dart';
  static final markAsResignedPage = '/src/page/hr_payroll/mark_as_resigned_page.dart';
  static final ageSelectFilterPage = '/src/page/all_reports/age/age_select_filter_page.dart';
  static final accountAmountPage = '/src/page/all_reports/journal/account_amount_page.dart';
  static final accountsSelectPage = '/src/page/all_reports/journal/accounts_select_page.dart';
  static final newJournalEntryPage = '/src/page/all_reports/journal/new_journal_entry_page.dart';
  static final newFixedAssetPage = '/src/page/all_reports/fixed_asset/new_fixed_asset_page.dart';
  static final linkedExpensePage = '/src/page/all_reports/fixed_asset/linked_expense_page.dart';
  static final salesOfFixedAssetPage = '/src/page/all_reports/fixed_asset/sales_of_fixed_asset_page.dart';
  static final disposalOfFixedAssetPage = '/src/page/all_reports/fixed_asset/disposal_of_fixed_asset_page.dart';
  static final bankReconciliationPage = '/src/page/all_reports/bank_reconciliation/bank_reconciliation_page.dart';
  static final reconcileAccountDetailPage = '/src/page/all_reports/bank_reconciliation/reconcile_account_detail_page.dart';
  static final reconcileAccountConfirmPage = '/src/page/all_reports/bank_reconciliation/reconcile_account_confirm_page.dart';
  static final bankReconciliationDetailWithFilePage = '/src/page/all_reports/bank_reconciliation/bank_reconciliation_detail_with_file_page.dart';
  static final reconcileAccountRecordDetailPage = '/src/page/all_reports/bank_reconciliation/reconcile_account_record_detail_page.dart';
  static final allReportsPage = '/src/page/all_reports/all_reports_page.dart';
  static final dateReportPage = '/src/page/all_reports/date_report_page.dart';
  static final inviteTeamMembersPage = '/src/page/invite_team/invite_team_members_page.dart';
  static final settingDataImport = '/src/page/setting/dataimport/setting_data_import_page.dart';
  static final manageRoleAccessPage = '/src/page/invite_team/manage_role_access_page.dart';
  static final newRolePage = '/src/page/invite_team/new_role_page.dart';
  static final webViewPage = '/src/page/web_view_page.dart';
  static final dashboardPage = '/src/page/dashboard_page.dart';
  static final chatRoomPage = '/src/page/ace_virtual_assistant/chat_room_page.dart';
  static final notificationPage = '/src/page/ace_virtual_assistant/notification_page.dart';
  static final ocrCameraPage = '/src/page/o_c_r_camera_page.dart';
  static final settingDataImportSummaryPage = '/src/page/setting/dataimport/setting_data_import_summary_page.dart';
  static final splashSecondPage = '/src/page/splash_second_page.dart';
  static final barCodeCameraPage = '/src/page/bar_code_camera_page.dart';
  static final systemDetectionPage = '/src/page/system_detection_page.dart';
  static final requestFreeDemoPage = '/src/page/login/request_free_demo_page.dart';
  static final fixedAssetPage = '/src/page/all_reports/fixed_asset/fixed_asset_page.dart';
  static final assignRoleByBatchPage = '/src/page/invite_team/assign_role_by_batch_page.dart';
  static final dataImportPage = '/src/page/dashboard/products_services/data_import_page.dart';
  static final productAndServiceDataImportPage = '/src/page/dashboard/products_services/products_and_services_data_import_page.dart';
  static final hrAndPayrollDataImportPage = '/src/page/hr_payroll/hr_and_payroll_data_import_page.dart';

  @override
  void registerRoutes(RRouter router) {
    router.addPRouter<LoginProvider>(
      path: loginPage,
      routerWidgetBuilder: (p) => LoginPage(
        toastMessage: p != null && p["toastMessage"] != null ? p["toastMessage"] as String : null,
      ),
      providerBuilder: (p) => LoginProvider(),
    );
    router.addPRouter<RegisterProvider>(
      path: registerPage,
      routerWidgetBuilder: (p) => RegisterPage(),
      providerBuilder: (p) => RegisterProvider(),
    );
    router.addPRouter<CreateAccountProvider>(
      path: createAccountPage,
      routerWidgetBuilder: (p) => CreateAccountPage(),
      providerBuilder: (p) => CreateAccountProvider(),
    );
    router.addPRouter<ChangePasswordProvider>(
      path: changePasswordPage,
      routerWidgetBuilder: (p) => ChangePasswordPage(),
      providerBuilder: (p) => ChangePasswordProvider(),
    );
    router.addPRouter<ForgotPasswordProvider>(
      path: forgotPasswordPage,
      routerWidgetBuilder: (p) => ForgotPasswordPage(),
      providerBuilder: (p) => ForgotPasswordProvider(),
    );
    router.addPRouter<SetNewPasswordProvider>(
      path: setNewPasswordPage,
      routerWidgetBuilder: (p) => SetNewPasswordPage(
        email: p != null && p["email"] != null ? p["email"] as String : null,
        countryCode: p != null && p["countryCode"] != null ? p["countryCode"] as String : null,
        phoneNumber: p != null && p["phoneNumber"] != null ? p["phoneNumber"] as String : null,
        otp: p != null && p["otp"] != null ? p["otp"] as String : null,
      ),
      providerBuilder: (p) => SetNewPasswordProvider(),
    );
    router.addPRouter<PendingInvitationProvider>(
      path: pendingInvitationPage,
      routerWidgetBuilder: (p) => PendingInvitationPage(),
      providerBuilder: (p) => PendingInvitationProvider(),
    );
    router.addPRouter<UpdatePhoneNumberProvider>(
      path: updatePhoneNumberPage,
      routerWidgetBuilder: (p) => UpdatePhoneNumberPage(),
      providerBuilder: (p) => UpdatePhoneNumberProvider(),
    );
    router.addPRouter<UpdateEmailProvider>(
      path: updateEmailPage,
      routerWidgetBuilder: (p) => UpdateEmailPage(),
      providerBuilder: (p) => UpdateEmailProvider(),
    );
    router.addPRouter<CreateBusinessProfileProvider>(
      path: createBusinessProfilePage,
      routerWidgetBuilder: (p) => CreateBusinessProfilePage(),
      providerBuilder: (p) => CreateBusinessProfileProvider(),
    );
    router.addPRouter<EditPhotoProvider>(
      path: editPhotoPage,
      routerWidgetBuilder: (p) => EditPhotoPage(
        filepath: p != null && p["filepath"] != null ? p["filepath"] as String : null,
        isFromPhoto: p != null && p["isFromPhoto"] != null ? p["isFromPhoto"] as bool : null,
      ),
      providerBuilder: (p) => EditPhotoProvider(),
    );
    router.addPRouter<ReviewPhotoProvider>(
      path: reviewPhotoPage,
      routerWidgetBuilder: (p) => ReviewPhotoPage(
        filepath: p != null && p["filepath"] != null ? p["filepath"] as String : null,
        isFromPhoto: p != null && p["isFromPhoto"] != null ? p["isFromPhoto"] as bool : null,
        isCombine: p != null && p["isCombine"] != null ? p["isCombine"] as bool : null,
      ),
      providerBuilder: (p) => ReviewPhotoProvider(),
    );
    router.addPRouter<SelectPhotoProvider>(
      path: selectPhotoPage,
      routerWidgetBuilder: (p) => SelectPhotoPage(
        isSelect: p != null && p["isSelect"] != null ? p["isSelect"] as bool : null,
      ),
      providerBuilder: (p) => SelectPhotoProvider(),
    );
    router.addPRouter<NewAccountProvider>(
      path: newAccountPage,
      routerWidgetBuilder: (p) => NewAccountPage(
        data: p != null && p["data"] != null ? p["data"] as CoaCoaAccountHeaderCoaAccountDetail : null,
        parentData: p != null && p["parentData"] != null ? p["parentData"] as CoaCoaAccountHeaderCoaAccountDetail : null,
      ),
      providerBuilder: (p) => NewAccountProvider(),
    );
    router.addPRouter<SetOpeningBalanceProvider>(
      path: setOpeningBalancePage,
      routerWidgetBuilder: (p) => SetOpeningBalancePage(),
      providerBuilder: (p) => SetOpeningBalanceProvider(),
    );
    router.addPRouter<NumberFormatProvider>(
      path: numberFormatPage,
      routerWidgetBuilder: (p) => NumberFormatPage(),
      providerBuilder: (p) => NumberFormatProvider(),
    );
    router.addPRouter<TemplateStyleProvider>(
      path: templateStylePage,
      routerWidgetBuilder: (p) => TemplateStylePage(),
      providerBuilder: (p) => TemplateStyleProvider(),
    );
    router.addPRouter<NumberFormatInfoProvider>(
      path: numberFormatInfoPage,
      routerWidgetBuilder: (p) => NumberFormatInfoPage(
        title: p != null && p["title"] != null ? p["title"] as String : null,
        value: p != null && p["value"] != null ? p["value"] as String : null,
      ),
      providerBuilder: (p) => NumberFormatInfoProvider(),
    );
    router.addPRouter<UnitOfMeasurementProvider>(
      path: unitOfMeasurementPage,
      routerWidgetBuilder: (p) => UnitOfMeasurementPage(),
      providerBuilder: (p) => UnitOfMeasurementProvider(),
    );
    router.addPRouter<TemplateStyleDetailProvider>(
      path: templateStyleDetailPage,
      routerWidgetBuilder: (p) => TemplateStyleDetailPage(
        title: p != null && p["title"] != null ? p["title"] as String : null,
        imageUrl: p != null && p["imageUrl"] != null ? p["imageUrl"] as String : null,
      ),
      providerBuilder: (p) => TemplateStyleDetailProvider(),
    );
    router.addPRouter<SubPayProvider>(
      path: subPayPage,
      routerWidgetBuilder: (p) => SubPayPage(
        paymentMethod: p != null && p["paymentMethod"] != null ? p["paymentMethod"] as String : null,
      ),
      providerBuilder: (p) => SubPayProvider(),
    );
    router.addPRouter<SubInvoiceProvider>(
      path: subInvoicePage,
      routerWidgetBuilder: (p) => SubInvoicePage(
        id: p != null && p["id"] != null ? p["id"] as int : null,
      ),
      providerBuilder: (p) => SubInvoiceProvider(),
    );
    router.addPRouter<SubPaymentProvider>(
      path: subPaymentPage,
      routerWidgetBuilder: (p) => SubPaymentPage(
        plan: p != null && p["plan"] != null ? p["plan"] as PlansItemEntity : null,
        billId: p != null && p["billId"] != null ? p["billId"] as int : null,
        companyId: p != null && p["companyId"] != null ? p["companyId"] as int : null,
        companyName: p != null && p["companyName"] != null ? p["companyName"] as String : null,
      ),
      providerBuilder: (p) => SubPaymentProvider(),
    );
    router.addPRouter<SubCompanyProvider>(
      path: subCompanyPage,
      routerWidgetBuilder: (p) => SubCompanyPage(
        subBillingItem: p != null && p["subBillingItem"] != null ? p["subBillingItem"] as SubBillingItemEntity : null,
      ),
      providerBuilder: (p) => SubCompanyProvider(),
    );
    router.addPRouter<SubAddCreditCardProvider>(
      path: subAddCreditCardPage,
      routerWidgetBuilder: (p) => SubAddCreditCardPage(),
      providerBuilder: (p) => SubAddCreditCardProvider(),
    );
    router.addPRouter<SubPaymentMethodManagerProvider>(
      path: subPaymentMethodManagerPage,
      routerWidgetBuilder: (p) => SubPaymentMethodManagerPage(),
      providerBuilder: (p) => SubPaymentMethodManagerProvider(),
    );
    router.addPRouter<GstProvider>(
      path: gstPage,
      routerWidgetBuilder: (p) => GstPage(),
      providerBuilder: (p) => GstProvider(),
    );
    router.addPRouter<SettingProvider>(
      path: settingPage,
      routerWidgetBuilder: (p) => SettingPage(),
      providerBuilder: (p) => SettingProvider(),
    );
    router.addPRouter<PreferencesProvider>(
      path: preferencesPage,
      routerWidgetBuilder: (p) => PreferencesPage(),
      providerBuilder: (p) => PreferencesProvider(),
    );
    router.addPRouter<SubscriptionProvider>(
      path: subscriptionPage,
      routerWidgetBuilder: (p) => SubscriptionPage(
        tabIndex: p != null && p["tabIndex"] != null ? p["tabIndex"] as int : null,
      ),
      providerBuilder: (p) => SubscriptionProvider(),
    );
    router.addPRouter<CompanyProfileProvider>(
      path: companyProfilePage,
      routerWidgetBuilder: (p) => CompanyProfilePage(
        data: p != null && p["data"] != null ? p["data"] as CompanyEntity : null,
      ),
      providerBuilder: (p) => CompanyProfileProvider(),
    );
    router.addPRouter<IndustrySelectProvider>(
      path: industrySelectPage,
      routerWidgetBuilder: (p) => IndustrySelectPage(
        select: p != null && p["select"] != null ? p["select"] as SettingAppIndustryType : null,
      ),
      providerBuilder: (p) => IndustrySelectProvider(),
    );
    router.addPRouter<AccountSettingsProvider>(
      path: accountSettingsPage,
      routerWidgetBuilder: (p) => AccountSettingsPage(),
      providerBuilder: (p) => AccountSettingsProvider(),
    );
    router.addPRouter<ChartOfAccountsProvider>(
      path: chartOfAccountsPage,
      routerWidgetBuilder: (p) => ChartOfAccountsPage(
        editId: p != null && p["editId"] != null ? p["editId"] as int : null,
        isSelectMode: p != null && p["isSelectMode"] != null ? p["isSelectMode"] as bool : null,
      ),
      providerBuilder: (p) => ChartOfAccountsProvider(),
    );
    router.addPRouter<AllPaymentProvider>(
      path: allPaymentPage,
      routerWidgetBuilder: (p) => AllPaymentPage(
        accountName: p != null && p["accountName"] != null ? p["accountName"] as String : null,
        accountId: p != null && p["accountId"] != null ? p["accountId"] as int : null,
      ),
      providerBuilder: (p) => AllPaymentProvider(),
    );
    router.addPRouter<BankAccountProvider>(
      path: bankAccountPage,
      routerWidgetBuilder: (p) => BankAccountPage(
        select: p != null && p["select"] != null ? p["select"] as AccountEntity : null,
      ),
      providerBuilder: (p) => BankAccountProvider(),
    );
    router.addPRouter<CashAndBankProvider>(
      path: cashAndBankPage,
      routerWidgetBuilder: (p) => CashAndBankPage(),
      providerBuilder: (p) => CashAndBankProvider(),
    );
    router.addPRouter<AddBankAccountProvider>(
      path: addBankAccountPage,
      routerWidgetBuilder: (p) => AddBankAccountPage(
        data: p != null && p["data"] != null ? p["data"] as AccountEntity : null,
      ),
      providerBuilder: (p) => AddBankAccountProvider(),
    );
    router.addPRouter<NewAccountTransferProvider>(
      path: newAccountTransferPage,
      routerWidgetBuilder: (p) => NewAccountTransferPage(
        data: p != null && p["data"] != null ? p["data"] as PaymentEntity : null,
        isSelectMode: p != null && p["isSelectMode"] != null ? p["isSelectMode"] as bool : null,
      ),
      providerBuilder: (p) => NewAccountTransferProvider(),
    );
    router.addPRouter<NewBillProvider>(
      path: newBillPage,
      routerWidgetBuilder: (p) => NewBillPage(
        data: p != null && p["data"] != null ? p["data"] as TransactionEntity : null,
        convert: p != null && p["convert"] != null ? p["convert"] as PurchaseOrderDetailEntity : null,
        isSelectMode: p != null && p["isSelectMode"] != null ? p["isSelectMode"] as bool : null,
      ),
      providerBuilder: (p) => NewBillProvider(),
    );
    router.addPRouter<AddPaymentProvider>(
      path: addPaymentPage,
      routerWidgetBuilder: (p) => AddPaymentPage(),
      providerBuilder: (p) => AddPaymentProvider(),
    );
    router.addPRouter<BillNumberProvider>(
      path: billNumberPage,
      routerWidgetBuilder: (p) => BillNumberPage(
        hideClosedBill: p != null && p["hideClosedBill"] != null ? p["hideClosedBill"] as bool : null,
        filterIssueTo: p != null && p["filterIssueTo"] != null ? p["filterIssueTo"] as int : null,
        isSingleSelect: p != null && p["isSingleSelect"] != null ? p["isSingleSelect"] as bool : null,
        selects: p != null && p["selects"] != null ? p["selects"] as List<BillEntity> : null,
        select: p != null && p["select"] != null ? p["select"] as BillEntity : null,
      ),
      providerBuilder: (p) => BillNumberProvider(),
    );
    router.addPRouter<SeePaymentProvider>(
      path: seePaymentPage,
      routerWidgetBuilder: (p) => SeePaymentPage(
        invoiceNumber: p != null && p["invoiceNumber"] != null ? p["invoiceNumber"] as String : null,
        isClosed: p != null && p["isClosed"] != null ? p["isClosed"] as bool : null,
        invoiceId: p != null && p["invoiceId"] != null ? p["invoiceId"] as int : null,
        billId: p != null && p["billId"] != null ? p["billId"] as int : null,
        creditId: p != null && p["creditId"] != null ? p["creditId"] as int : null,
        debitId: p != null && p["debitId"] != null ? p["debitId"] as int : null,
        billNumber: p != null && p["billNumber"] != null ? p["billNumber"] as String : null,
        expenseId: p != null && p["expenseId"] != null ? p["expenseId"] as int : null,
      ),
      providerBuilder: (p) => SeePaymentProvider(),
    );
    router.addPRouter<SalesProvider>(
      path: salesPage,
      routerWidgetBuilder: (p) => SalesPage(
        initFilter: p != null && p["initFilter"] != null ? p["initFilter"] as String : null,
        initIndex: p != null && p["initIndex"] != null ? p["initIndex"] as int : null,
      ),
      providerBuilder: (p) => SalesProvider(),
    );
    router.addPRouter<SelectCategoryProvider>(
      path: selectCategoryPage,
      routerWidgetBuilder: (p) => SelectCategoryPage(
        type: p != null && p["type"] != null ? p["type"] as String : null,
        isPop: p != null && p["isPop"] != null ? p["isPop"] as bool : null,
        unit: p != null && p["unit"] != null ? p["unit"] as SettingDataCurrency : null,
        select: p != null && p["select"] != null ? p["select"] as SettingDataCategory : null,
      ),
      providerBuilder: (p) => SelectCategoryProvider(),
    );
    router.addPRouter<NewCashInProvider>(
      path: newCashInPage,
      routerWidgetBuilder: (p) => NewCashInPage(
        type: p != null && p["type"] != null ? p["type"] as String : null,
        data: p != null && p["data"] != null ? p["data"] as TransactionEntity : null,
        invoiceList: p != null && p["invoiceList"] != null ? p["invoiceList"] as List<InvoiceEntity> : null,
        taxPeriod: p != null && p["taxPeriod"] != null ? p["taxPeriod"] as TaxSubmissionDetailEntity : null,
        detailData: p != null && p["detailData"] != null ? p["detailData"] as PaymentDetailEntity : null,
        debitNote: p != null && p["debitNote"] != null ? p["debitNote"] as DebitNoteDetailEntity : null,
        total: p != null && p["total"] != null ? p["total"] as num : null,
        assetId: p != null && p["assetId"] != null ? p["assetId"] as int : null,
        assetNumber: p != null && p["assetNumber"] != null ? p["assetNumber"] as String : null,
        assetName: p != null && p["assetName"] != null ? p["assetName"] as String : null,
        category: p != null && p["category"] != null ? p["category"] as SettingDataCategory : null,
        currency: p != null && p["currency"] != null ? p["currency"] as SettingDataCurrency : null,
        paymentData: p != null && p["paymentData"] != null ? p["paymentData"] as PaymentEntity : null,
        isSelectMode: p != null && p["isSelectMode"] != null ? p["isSelectMode"] as bool : null,
        receiveFrom: p != null && p["receiveFrom"] != null ? p["receiveFrom"] as BusinessContactEntity : null,
      ),
      providerBuilder: (p) => NewCashInProvider(),
    );
    router.addPRouter<SelectGrantProvider>(
      path: selectGrantPage,
      routerWidgetBuilder: (p) => SelectGrantPage(
        select: p != null && p["select"] != null ? p["select"] as GrantEntity : null,
      ),
      providerBuilder: (p) => SelectGrantProvider(),
    );
    router.addPRouter<AllContactsProvider>(
      path: allContactsPage,
      routerWidgetBuilder: (p) => AllContactsPage(),
      providerBuilder: (p) => AllContactsProvider(),
    );
    router.addPRouter<BusinessContactsProvider>(
      path: businessContactsPage,
      routerWidgetBuilder: (p) => BusinessContactsPage(
        select: p != null && p["select"] != null ? p["select"] as BusinessContactEntity : null,
      ),
      providerBuilder: (p) => BusinessContactsProvider(),
    );
    router.addPRouter<EmployeeContactsProvider>(
      path: employeeContactsPage,
      routerWidgetBuilder: (p) => EmployeeContactsPage(
        employees: p != null && p["employees"] != null ? p["employees"] as List<EmployeeContactEntity> : null,
        showAll: p != null && p["showAll"] != null ? p["showAll"] as bool : null,
        canAdd: p != null && p["canAdd"] != null ? p["canAdd"] as bool : null,
        select: p != null && p["select"] != null ? p["select"] as EmployeeContactEntity : null,
      ),
      providerBuilder: (p) => EmployeeContactsProvider(),
    );
    router.addPRouter<NewContactPersonProvider>(
      path: newContactPersonPage,
      routerWidgetBuilder: (p) => NewContactPersonPage(
        data: p != null && p["data"] != null ? p["data"] as ContactPersonEntity : null,
        name: p != null && p["name"] != null ? p["name"] as String : null,
        id: p != null && p["id"] != null ? p["id"] as int : null,
        phoneNumber: p != null && p["phoneNumber"] != null ? p["phoneNumber"] as String : null,
      ),
      providerBuilder: (p) => NewContactPersonProvider(),
    );
    router.addPRouter<MainBusinessContactProvider>(
      path: mainBusinessContactPage,
      routerWidgetBuilder: (p) => MainBusinessContactPage(
        initFilter: p != null && p["initFilter"] != null ? p["initFilter"] as String : null,
      ),
      providerBuilder: (p) => MainBusinessContactProvider(),
    );
    router.addPRouter<BusinessContactDetailProvider>(
      path: businessContactDetailPage,
      routerWidgetBuilder: (p) => BusinessContactDetailPage(
        data: p != null && p["data"] != null ? p["data"] as BusinessContactEntity : null,
      ),
      providerBuilder: (p) => BusinessContactDetailProvider(),
    );
    router.addPRouter<DeleteBusinessContactProvider>(
      path: deleteBusinessContactPage,
      routerWidgetBuilder: (p) => DeleteBusinessContactPage(),
      providerBuilder: (p) => DeleteBusinessContactProvider(),
    );
    router.addPRouter<BusinessContactProfileProvider>(
      path: businessContactProfilePage,
      routerWidgetBuilder: (p) => BusinessContactProfilePage(
        data: p != null && p["data"] != null ? p["data"] as BusinessContactEntity : null,
        name: p != null && p["name"] != null ? p["name"] as String : null,
      ),
      providerBuilder: (p) => BusinessContactProfileProvider(),
    );
    router.addPRouter<StatementOfAccountProvider>(
      path: statementOfAccountPage,
      routerWidgetBuilder: (p) => StatementOfAccountPage(
        data: p != null && p["data"] != null ? p["data"] as BusinessContactEntity : null,
      ),
      providerBuilder: (p) => StatementOfAccountProvider(),
    );
    router.addPRouter<NewExpenseProvider>(
      path: newExpensePage,
      routerWidgetBuilder: (p) => NewExpensePage(
        data: p != null && p["data"] != null ? p["data"] as TransactionEntity : null,
        isHidePaid: p != null && p["isHidePaid"] != null ? p["isHidePaid"] as bool : null,
        isSelectMode: p != null && p["isSelectMode"] != null ? p["isSelectMode"] as bool : null,
        attachments: p != null && p["attachments"] != null ? p["attachments"] as List<String> : null,
        expenseData: p != null && p["expenseData"] != null ? p["expenseData"] as ExpenseDetailEntity : null,
        ocrData: p != null && p["ocrData"] != null ? p["ocrData"] as OcrAttachmentOcrData : null,
      ),
      providerBuilder: (p) => NewExpenseProvider(),
    );
    router.addPRouter<NewInvoiceProvider>(
      path: newInvoicePage,
      routerWidgetBuilder: (p) => NewInvoicePage(
        data: p != null && p["data"] != null ? p["data"] as TransactionEntity : null,
        generate: p != null && p["generate"] != null ? p["generate"] as QuotationDetailEntity : null,
        isSelectMode: p != null && p["isSelectMode"] != null ? p["isSelectMode"] as bool : null,
      ),
      providerBuilder: (p) => NewInvoiceProvider(),
    );
    router.addPRouter<InvoiceNumberProvider>(
      path: invoiceNumberPage,
      routerWidgetBuilder: (p) => InvoiceNumberPage(
        filterIssueTo: p != null && p["filterIssueTo"] != null ? p["filterIssueTo"] as int : null,
        isMultiple: p != null && p["isMultiple"] != null ? p["isMultiple"] as bool : null,
        selects: p != null && p["selects"] != null ? p["selects"] as List<InvoiceEntity> : null,
        select: p != null && p["select"] != null ? p["select"] as InvoiceEntity : null,
      ),
      providerBuilder: (p) => InvoiceNumberProvider(),
    );
    router.addPRouter<RecordPaymentProvider>(
      path: recordPaymentPage,
      routerWidgetBuilder: (p) => RecordPaymentPage(),
      providerBuilder: (p) => RecordPaymentProvider(),
    );
    router.addPRouter<SelectTransactionPurposeProvider>(
      path: selectTransactionPurposePage,
      routerWidgetBuilder: (p) => SelectTransactionPurposePage(
        isCashOut: p != null && p["isCashOut"] != null ? p["isCashOut"] as bool : null,
        select: p != null && p["select"] != null ? p["select"] as SettingDataCategory : null,
      ),
      providerBuilder: (p) => SelectTransactionPurposeProvider(),
    );
    router.addPRouter<NewCashOutProvider>(
      path: newCashOutPage,
      routerWidgetBuilder: (p) => NewCashOutPage(
        type: p != null && p["type"] != null ? p["type"] as String : null,
        data: p != null && p["data"] != null ? p["data"] as TransactionEntity : null,
        taxPeriod: p != null && p["taxPeriod"] != null ? p["taxPeriod"] as TaxSubmissionDetailEntity : null,
        creditNote: p != null && p["creditNote"] != null ? p["creditNote"] as CreditNoteDetailEntity : null,
        detailData: p != null && p["detailData"] != null ? p["detailData"] as PaymentDetailEntity : null,
        total: p != null && p["total"] != null ? p["total"] as double : null,
        currency: p != null && p["currency"] != null ? p["currency"] as SettingDataCurrency : null,
        paymentData: p != null && p["paymentData"] != null ? p["paymentData"] as PaymentEntity : null,
        cpfData: p != null && p["cpfData"] != null ? p["cpfData"] as CpfContributionEntity : null,
        customExpenseData: p != null && p["customExpenseData"] != null ? p["customExpenseData"] as CustomExpenseData : null,
        isSelectMode: p != null && p["isSelectMode"] != null ? p["isSelectMode"] as bool : null,
        billList: p != null && p["billList"] != null ? p["billList"] as List<BillEntity> : null,
        paidTo: p != null && p["paidTo"] != null ? p["paidTo"] as BusinessContactEntity : null,
        expenseId: p != null && p["expenseId"] != null ? p["expenseId"] as int : null,
        expenseNumber: p != null && p["expenseNumber"] != null ? p["expenseNumber"] as String : null,
        payslipNumber: p != null && p["payslipNumber"] != null ? p["payslipNumber"] as String : null,
      ),
      providerBuilder: (p) => NewCashOutProvider(),
    );
    router.addPRouter<DeliveryOrderProvider>(
      path: deliveryOrderPage,
      routerWidgetBuilder: (p) => DeliveryOrderPage(
        id: p != null && p["id"] != null ? p["id"] as int : null,
      ),
      providerBuilder: (p) => DeliveryOrderProvider(),
    );
    router.addPRouter<PurchasesProvider>(
      path: purchasesPage,
      routerWidgetBuilder: (p) => PurchasesPage(
        index: p != null && p["index"] != null ? p["index"] as int : null,
      ),
      providerBuilder: (p) => PurchasesProvider(),
    );
    router.addPRouter<NewPurchaseOrderProvider>(
      path: newPurchaseOrderPage,
      routerWidgetBuilder: (p) => NewPurchaseOrderPage(
        data: p != null && p["data"] != null ? p["data"] as TransactionEntity : null,
        generate: p != null && p["generate"] != null ? p["generate"] as QuotationDetailEntity : null,
        isSelectMode: p != null && p["isSelectMode"] != null ? p["isSelectMode"] as bool : null,
      ),
      providerBuilder: (p) => NewPurchaseOrderProvider(),
    );
    router.addPRouter<PurchaseOrderNumberProvider>(
      path: purchaseOrderNumberPage,
      routerWidgetBuilder: (p) => PurchaseOrderNumberPage(
        contactId: p != null && p["contactId"] != null ? p["contactId"] as int : null,
        select: p != null && p["select"] != null ? p["select"] as PurchaseOrderEntity : null,
      ),
      providerBuilder: (p) => PurchaseOrderNumberProvider(),
    );
    router.addPRouter<NewQuotationProvider>(
      path: newQuotationPage,
      routerWidgetBuilder: (p) => NewQuotationPage(
        data: p != null && p["data"] != null ? p["data"] as TransactionEntity : null,
        isSelectMode: p != null && p["isSelectMode"] != null ? p["isSelectMode"] as bool : null,
      ),
      providerBuilder: (p) => NewQuotationProvider(),
    );
    router.addPRouter<QuotationNumberProvider>(
      path: quotationNumberPage,
      routerWidgetBuilder: (p) => QuotationNumberPage(
        contactId: p != null && p["contactId"] != null ? p["contactId"] as int : null,
        select: p != null && p["select"] != null ? p["select"] as QuotationEntity : null,
      ),
      providerBuilder: (p) => QuotationNumberProvider(),
    );
    router.addPRouter<AmountGstRateCategoryProvider>(
      path: amountGstRateCategoryPage,
      routerWidgetBuilder: (p) => AmountGstRateCategoryPage(
        type: p != null && p["type"] != null ? p["type"] as String : null,
        unit: p != null && p["unit"] != null ? p["unit"] as SettingDataCurrency : null,
        category: p != null && p["category"] != null ? p["category"] as SettingDataCategory : null,
        amount: p != null && p["amount"] != null ? p["amount"] as String : null,
        isCheckInclusive: p != null && p["isCheckInclusive"] != null ? p["isCheckInclusive"] as bool : null,
        tax: p != null && p["tax"] != null ? p["tax"] as SettingDataTax : null,
      ),
      providerBuilder: (p) => AmountGstRateCategoryProvider(),
    );
    router.addPRouter<ItemAmountProvider>(
      path: itemAmountPage,
      routerWidgetBuilder: (p) => ItemAmountPage(
        item: p != null && p["item"] != null ? p["item"] as ServiceAndProductEntity : null,
        isCredit: p != null && p["isCredit"] != null ? p["isCredit"] as bool : null,
        isEdit: p != null && p["isEdit"] != null ? p["isEdit"] as bool : null,
      ),
      providerBuilder: (p) => ItemAmountProvider(),
    );
    router.addPRouter<CreditDebitProvider>(
      path: creditDebitPage,
      routerWidgetBuilder: (p) => CreditDebitPage(
        contactId: p != null && p["contactId"] != null ? p["contactId"] as int : null,
        index: p != null && p["index"] != null ? p["index"] as int : null,
      ),
      providerBuilder: (p) => CreditDebitProvider(),
    );
    router.addPRouter<SelectItemProvider>(
      path: selectItemPage,
      routerWidgetBuilder: (p) => SelectItemPage(
        billInvoiceId: p != null && p["billInvoiceId"] != null ? p["billInvoiceId"] as int : null,
        isCredit: p != null && p["isCredit"] != null ? p["isCredit"] as bool : null,
      ),
      providerBuilder: (p) => SelectItemProvider(),
    );
    router.addPRouter<NewDebitNoteProvider>(
      path: newDebitNotePage,
      routerWidgetBuilder: (p) => NewDebitNotePage(
        data: p != null && p["data"] != null ? p["data"] as TransactionEntity : null,
        isSelectMode: p != null && p["isSelectMode"] != null ? p["isSelectMode"] as bool : null,
      ),
      providerBuilder: (p) => NewDebitNoteProvider(),
    );
    router.addPRouter<NewCreditNoteProvider>(
      path: newCreditNotePage,
      routerWidgetBuilder: (p) => NewCreditNotePage(
        data: p != null && p["data"] != null ? p["data"] as TransactionEntity : null,
        isSelectMode: p != null && p["isSelectMode"] != null ? p["isSelectMode"] as bool : null,
      ),
      providerBuilder: (p) => NewCreditNoteProvider(),
    );
    router.addPRouter<CreditNoteNumberProvider>(
      path: creditNoteNumberPage,
      routerWidgetBuilder: (p) => CreditNoteNumberPage(),
      providerBuilder: (p) => CreditNoteNumberProvider(),
    );
    router.addPRouter<DeleteCreditNoteProvider>(
      path: deleteCreditNotePage,
      routerWidgetBuilder: (p) => DeleteCreditNotePage(),
      providerBuilder: (p) => DeleteCreditNoteProvider(),
    );
    router.addPRouter<DeleteDebitNoteProvider>(
      path: deleteDebitNotePage,
      routerWidgetBuilder: (p) => DeleteDebitNotePage(),
      providerBuilder: (p) => DeleteDebitNoteProvider(),
    );
    router.addPRouter<AllTransactionsProvider>(
      path: allTransactionsPage,
      routerWidgetBuilder: (p) => AllSalesTransactionsPage(
        type: p != null && p["type"] != null ? p["type"] as int : null,
        contactId: p != null && p["contactId"] != null ? p["contactId"] as int : null,
        initFilter: p != null && p["initFilter"] != null ? p["initFilter"] as String : null,
        dueDate: p != null && p["dueDate"] != null ? p["dueDate"] as String : null,
        accountId: p != null && p["accountId"] != null ? p["accountId"] as int : null,
      ),
      providerBuilder: (p) => AllTransactionsProvider(),
    );
    router.addPRouter<QuantityProvider>(
      path: quantityPage,
      routerWidgetBuilder: (p) => QuantityPage(
        initialNumber: p != null && p["initialNumber"] != null ? p["initialNumber"] as int : null,
        product: p != null && p["product"] != null ? p["product"] as ProductEntity : null,
        service: p != null && p["service"] != null ? p["service"] as ServicesEntity : null,
        usePurchasePrice: p != null && p["usePurchasePrice"] != null ? p["usePurchasePrice"] as bool : null,
      ),
      providerBuilder: (p) => QuantityProvider(),
    );
    router.addPRouter<NewProductProvider>(
      path: newProductPage,
      routerWidgetBuilder: (p) => NewProductPage(
        data: p != null && p["data"] != null ? p["data"] as ProductEntity : null,
        text: p != null && p["text"] != null ? p["text"] as String : null,
        id: p != null && p["id"] != null ? p["id"] as int : null,
        isPro: p != null && p["isPro"] != null ? p["isPro"] as bool : null,
      ),
      providerBuilder: (p) => NewProductProvider(),
    );
    router.addPRouter<NewServiceProvider>(
      path: newServicePage,
      routerWidgetBuilder: (p) => NewServicePage(
        data: p != null && p["data"] != null ? p["data"] as ServicesEntity : null,
        text: p != null && p["text"] != null ? p["text"] as String : null,
        isPro: p != null && p["isPro"] != null ? p["isPro"] as bool : null,
      ),
      providerBuilder: (p) => NewServiceProvider(),
    );
    router.addPRouter<LinkedProductsProvider>(
      path: linkedProductsPage,
      routerWidgetBuilder: (p) => LinkedProductsPage(
        selects: p != null && p["selects"] != null ? p["selects"] as List<ProductEntity> : null,
      ),
      providerBuilder: (p) => LinkedProductsProvider(),
    );
    router.addPRouter<LinkedServicesProvider>(
      path: linkedServicesPage,
      routerWidgetBuilder: (p) => LinkedServicesPage(
        selects: p != null && p["selects"] != null ? p["selects"] as List<ServicesEntity> : null,
      ),
      providerBuilder: (p) => LinkedServicesProvider(),
    );
    router.addPRouter<AdjustInventoryProvider>(
      path: adjustInventoryPage,
      routerWidgetBuilder: (p) => AdjustInventoryPage(
        quantity: p != null && p["quantity"] != null ? p["quantity"] as String : null,
        id: p != null && p["id"] != null ? p["id"] as int : null,
        productName: p != null && p["productName"] != null ? p["productName"] as String : null,
      ),
      providerBuilder: (p) => AdjustInventoryProvider(),
    );
    router.addPRouter<ProductBomListProvider>(
      path: productBomListPage,
      routerWidgetBuilder: (p) => ProductBomListPage(
        filterData: p != null && p["filterData"] != null ? p["filterData"] as List<ProductBoms> : null,
        select: p != null && p["select"] != null ? p["select"] as ProductBoms : null,
      ),
      providerBuilder: (p) => ProductBomListProvider(),
    );
    router.addPRouter<InventoryAdjustmentProvider>(
      path: inventoryAdjustmentPage,
      routerWidgetBuilder: (p) => InventoryAdjustmentPage(
        data: p != null && p["data"] != null ? p["data"] as InventoryEntity : null,
        batchId: p != null && p["batchId"] != null ? p["batchId"] as String : null,
        id: p != null && p["id"] != null ? p["id"] as int : null,
      ),
      providerBuilder: (p) => InventoryAdjustmentProvider(),
    );
    router.addPRouter<AdjustInventoryListProvider>(
      path: adjustInventoryListPage,
      routerWidgetBuilder: (p) => AdjustInventoryListPage(
        status: p != null && p["status"] != null ? p["status"] as String : null,
      ),
      providerBuilder: (p) => AdjustInventoryListProvider(),
    );
    router.addPRouter<ProductsAndServicesProvider>(
      path: productsAndServicesPage,
      routerWidgetBuilder: (p) => ProductsAndServicesPage(
        isShowZero: p != null && p["isShowZero"] != null ? p["isShowZero"] as bool : null,
        isSelectMode: p != null && p["isSelectMode"] != null ? p["isSelectMode"] as bool : null,
        usePurchasePrice: p != null && p["usePurchasePrice"] != null ? p["usePurchasePrice"] as bool : null,
        initStatus: p != null && p["initStatus"] != null ? p["initStatus"] as String : null,
        initIndex: p != null && p["initIndex"] != null ? p["initIndex"] as int : null,
      ),
      providerBuilder: (p) => ProductsAndServicesProvider(),
    );
    router.addPRouter<BatchProductsAndServicesProvider>(
      path: batchProductsAndServicesPage,
      routerWidgetBuilder: (p) => BatchProductsAndServicesPage(
        type: p != null && p["type"] != null ? p["type"] as String : null,
        status: p != null && p["status"] != null ? p["status"] as String : null,
        isService: p != null && p["isService"] != null ? p["isService"] as bool : null,
      ),
      providerBuilder: (p) => BatchProductsAndServicesProvider(),
    );
    router.addPRouter<ProductsAndServicesCategoryProvider>(
      path: productsAndServicesCategoryPage,
      routerWidgetBuilder: (p) => ProductsAndServicesCategoryPage(
        type: p != null && p["type"] != null ? p["type"] as String : null,
        categories: p != null && p["categories"] != null ? p["categories"] as List<String> : null,
      ),
      providerBuilder: (p) => ProductsAndServicesCategoryProvider(),
    );
    router.addPRouter<NewLeaveProvider>(
      path: newLeavePage,
      routerWidgetBuilder: (p) => NewLeavePage(
        data: p != null && p["data"] != null ? p["data"] as LeaveItemEntity : null,
      ),
      providerBuilder: (p) => NewLeaveProvider(),
    );
    router.addPRouter<LeaveOperationProvider>(
      path: leaveOperationPage,
      routerWidgetBuilder: (p) => LeaveOperationPage(
        operation: p != null && p["operation"] != null ? p["operation"] as String : null,
      ),
      providerBuilder: (p) => LeaveOperationProvider(),
    );
    router.addPRouter<LeaveAdjustmentProvider>(
      path: leaveAdjustmentPage,
      routerWidgetBuilder: (p) => LeaveAdjustmentPage(),
      providerBuilder: (p) => LeaveAdjustmentProvider(),
    );
    router.addPRouter<SelectLeaveTypeProvider>(
      path: selectLeaveTypePage,
      routerWidgetBuilder: (p) => SelectLeaveTypePage(
        data: p != null && p["data"] != null ? p["data"] as EmployeeContactEntity : null,
        select: p != null && p["select"] != null ? p["select"] as EmployeeContactEmployeeLeaves : null,
      ),
      providerBuilder: (p) => SelectLeaveTypeProvider(),
    );
    router.addPRouter<SelectAdjustmentLeaveTypeProvider>(
      path: selectAdjustmentLeaveTypePage,
      routerWidgetBuilder: (p) => SelectAdjustmentLeaveTypePage(),
      providerBuilder: (p) => SelectAdjustmentLeaveTypeProvider(),
    );
    router.addPRouter<LeaveDetailsProvider>(
      path: leaveDetailsPage,
      routerWidgetBuilder: (p) => LeaveDetailsPage(
        data: p != null && p["data"] != null ? p["data"] as List<EmployeeContactEntity> : null,
        startDate: p != null && p["startDate"] != null ? p["startDate"] as String : null,
        endDate: p != null && p["endDate"] != null ? p["endDate"] as String : null,
      ),
      providerBuilder: (p) => LeaveDetailsProvider(),
    );
    router.addPRouter<PayrollDeleteProvider>(
      path: payrollDeletePage,
      routerWidgetBuilder: (p) => PayrollDeletePage(),
      providerBuilder: (p) => PayrollDeleteProvider(),
    );
    router.addPRouter<PayrollDetailProvider>(
      path: payrollDetailPage,
      routerWidgetBuilder: (p) => PayrollDetailPage(
        data: p != null && p["data"] != null ? p["data"] as PayslipsItemEntity : null,
      ),
      providerBuilder: (p) => PayrollDetailProvider(),
    );
    router.addPRouter<PayrollPaymentProvider>(
      path: payrollPaymentPage,
      routerWidgetBuilder: (p) => PayrollPaymentPage(),
      providerBuilder: (p) => PayrollPaymentProvider(),
    );
    router.addPRouter<SetSalaryPeriodProvider>(
      path: setSalaryPeriodPage,
      routerWidgetBuilder: (p) => SetSalaryPeriodPage(
        data: p != null && p["data"] != null ? p["data"] as List<EmployeeContactEntity> : null,
      ),
      providerBuilder: (p) => SetSalaryPeriodProvider(),
    );
    router.addPRouter<RecordCpfContributionProvider>(
      path: recordCpfContributionPage,
      routerWidgetBuilder: (p) => RecordCpfContributionPage(data: p != null && p["data"] != null ? p["data"] as CpfContributionEntity : null),
      providerBuilder: (p) => RecordCpfContributionProvider(),
    );
    router.addPRouter<NewEmployeeProvider>(
      path: newEmployeePage,
      routerWidgetBuilder: (p) => NewEmployeePage(
        data: p != null && p["data"] != null ? p["data"] as EmployeeContactEntity : null,
        isDuplicate: p != null && p["isDuplicate"] != null ? p["isDuplicate"] as bool : null,
        id: p != null && p["id"] != null ? p["id"] as int : null,
      ),
      providerBuilder: (p) => NewEmployeeProvider(),
    );
    router.addPRouter<SelectIncomeTypeProvider>(
      path: selectIncomeTypePage,
      routerWidgetBuilder: (p) => SelectIncomeTypePage(
        currency: p != null && p["currency"] != null ? p["currency"] as String : null,
      ),
      providerBuilder: (p) => SelectIncomeTypeProvider(),
    );
    router.addPRouter<SelectWorkingDayProvider>(
      path: selectWorkingDayPage,
      routerWidgetBuilder: (p) => SelectWorkingDayPage(
        workingDaysCount: p != null && p["workingDaysCount"] != null ? p["workingDaysCount"] as num : null,
        workingDays: p != null && p["workingDays"] != null ? p["workingDays"] as List<WorkingDayData> : null,
      ),
      providerBuilder: (p) => SelectWorkingDayProvider(),
    );
    router.addPRouter<EmployeeBatchSelectProvider>(
      path: employeeBatchSelectPage,
      routerWidgetBuilder: (p) => EmployeeBatchSelectPage(
        isSelectMode: p != null && p["isSelectMode"] != null ? p["isSelectMode"] as bool : null,
        pageTitle: p != null && p["pageTitle"] != null ? p["pageTitle"] as String : null,
      ),
      providerBuilder: (p) => EmployeeBatchSelectProvider(),
    );
    router.addPRouter<ReimburseApproveProvider>(
      path: reimburseApprovePage,
      routerWidgetBuilder: (p) => ReimburseApprovePage(
        operation: p != null && p["operation"] != null ? p["operation"] as String : null,
      ),
      providerBuilder: (p) => ReimburseApproveProvider(),
    );
    router.addPRouter<HrAndPayrollProvider>(
      path: hrAndPayrollPage,
      routerWidgetBuilder: (p) => HrAndPayrollPage(
        employeeStatus: p != null && p["employeeStatus"] != null ? p["employeeStatus"] as String : null,
        isSelectEmployee: p != null && p["isSelectEmployee"] != null ? p["isSelectEmployee"] as bool : null,
        initIndex: p != null && p["initIndex"] != null ? p["initIndex"] as int : null,
      ),
      providerBuilder: (p) => HrAndPayrollProvider(),
    );
    router.addPRouter<DuplicateAsNewProvider>(
      path: duplicateAsNewPage,
      routerWidgetBuilder: (p) => DuplicateAsNewPage(),
      providerBuilder: (p) => DuplicateAsNewProvider(),
    );
    router.addPRouter<MarkAsResignedProvider>(
      path: markAsResignedPage,
      routerWidgetBuilder: (p) => MarkAsResignedPage(),
      providerBuilder: (p) => MarkAsResignedProvider(),
    );
    router.addPRouter<AgeSelectFilterProvider>(
      path: ageSelectFilterPage,
      routerWidgetBuilder: (p) => AgeSelectFilterPage(
        filterList: p != null && p["filterList"] != null ? p["filterList"] as List<String> : null,
        select: p != null && p["select"] != null ? p["select"] as String : null,
      ),
      providerBuilder: (p) => AgeSelectFilterProvider(),
    );
    router.addPRouter<AccountAmountProvider>(
      path: accountAmountPage,
      routerWidgetBuilder: (p) => AccountAmountPage(
        account: p != null && p["account"] != null ? p["account"] as CoaCoaAccountHeaderCoaAccountDetail : null,
        isCheckInclusive: p != null && p["isCheckInclusive"] != null ? p["isCheckInclusive"] as bool : null,
        gst: p != null && p["gst"] != null ? p["gst"] as SettingDataTax : null,
        amount: p != null && p["amount"] != null ? p["amount"] as num : null,
      ),
      providerBuilder: (p) => AccountAmountProvider(),
    );
    router.addPRouter<AccountsSelectProvider>(
      path: accountsSelectPage,
      routerWidgetBuilder: (p) => AccountsSelectPage(
        isSelect: p != null && p["isSelect"] != null ? p["isSelect"] as bool : null,
      ),
      providerBuilder: (p) => AccountsSelectProvider(),
    );
    router.addPRouter<NewJournalEntryProvider>(
      path: newJournalEntryPage,
      routerWidgetBuilder: (p) => NewJournalEntryPage(
        title: p != null && p["title"] != null ? p["title"] as String : null,
        id: p != null && p["id"] != null ? p["id"] as int : null,
      ),
      providerBuilder: (p) => NewJournalEntryProvider(),
    );
    router.addPRouter<NewFixedAssetProvider>(
      path: newFixedAssetPage,
      routerWidgetBuilder: (p) => NewFixedAssetPage(
        id: p != null && p["id"] != null ? p["id"] as int : null,
        fixedAsset: p != null && p["fixedAsset"] != null ? p["fixedAsset"] as FixedAssetEntity : null,
      ),
      providerBuilder: (p) => NewFixedAssetProvider(),
    );
    router.addPRouter<LinkedExpenseProvider>(
      path: linkedExpensePage,
      routerWidgetBuilder: (p) => LinkedExpensePage(
        select: p != null && p["select"] != null ? p["select"] as TransactionEntity : null,
      ),
      providerBuilder: (p) => LinkedExpenseProvider(),
    );
    router.addPRouter<SalesOfFixedAssetProvider>(
      path: salesOfFixedAssetPage,
      routerWidgetBuilder: (p) => SalesOfFixedAssetPage(
        id: p != null && p["id"] != null ? p["id"] as int : null,
        unit: p != null && p["unit"] != null ? p["unit"] as SettingDataCurrency : null,
        salesId: p != null && p["salesId"] != null ? p["salesId"] as int : null,
        salesPrice: p != null && p["salesPrice"] != null ? p["salesPrice"] as String : null,
        salesDate: p != null && p["salesDate"] != null ? p["salesDate"] as String : null,
        notes: p != null && p["notes"] != null ? p["notes"] as String : null,
        attachments: p != null && p["attachments"] != null ? p["attachments"] as List<OcrAttachmentEntity> : null,
        isViewOnly: p != null && p["isViewOnly"] != null ? p["isViewOnly"] as bool : null,
        assetName: p != null && p["assetName"] != null ? p["assetName"] as String : null,
      ),
      providerBuilder: (p) => SalesOfFixedAssetProvider(),
    );
    router.addPRouter<DisposalOfFixedAssetProvider>(
      path: disposalOfFixedAssetPage,
      routerWidgetBuilder: (p) => DisposalOfFixedAssetPage(
        id: p != null && p["id"] != null ? p["id"] as int : null,
        disposalDate: p != null && p["disposalDate"] != null ? p["disposalDate"] as String : null,
        notes: p != null && p["notes"] != null ? p["notes"] as String : null,
        attachments: p != null && p["attachments"] != null ? p["attachments"] as List<OcrAttachmentEntity> : null,
        isViewOnly: p != null && p["isViewOnly"] != null ? p["isViewOnly"] as bool : null,
        assetName: p != null && p["assetName"] != null ? p["assetName"] as String : null,
      ),
      providerBuilder: (p) => DisposalOfFixedAssetProvider(),
    );
    router.addPRouter<BankReconciliationProvider>(
      path: bankReconciliationPage,
      routerWidgetBuilder: (p) => BankReconciliationPage(),
      providerBuilder: (p) => BankReconciliationProvider(),
    );
    router.addPRouter<ReconcileAccountDetailProvider>(
      path: reconcileAccountDetailPage,
      routerWidgetBuilder: (p) => ReconcileAccountDetailPage(
        bank: p != null && p["bank"] != null ? p["bank"] as BankReconciliationEntity : null,
        currentAccount: p != null && p["currentAccount"] != null ? p["currentAccount"] as AccountEntity : null,
        title: p != null && p["title"] != null ? p["title"] as String : null,
        closingDate: p != null && p["closingDate"] != null ? p["closingDate"] as String : null,
      ),
      providerBuilder: (p) => ReconcileAccountDetailProvider(),
    );
    router.addPRouter<ReconcileAccountConfirmProvider>(
      path: reconcileAccountConfirmPage,
      routerWidgetBuilder: (p) => ReconcileAccountConfirmPage(
        title: p != null && p["title"] != null ? p["title"] as String : null,
        closingDate: p != null && p["closingDate"] != null ? p["closingDate"] as String : null,
        beginningBalance: p != null && p["beginningBalance"] != null ? p["beginningBalance"] as String : null,
        statementBalance: p != null && p["statementBalance"] != null ? p["statementBalance"] as String : null,
        reconcileId: p != null && p["reconcileId"] != null ? p["reconcileId"] as int : null,
        selectReconcileList: p != null && p["selectReconcileList"] != null ? p["selectReconcileList"] as List<BankDetailRecordItemEntity> : null,
        records: p != null && p["records"] != null ? p["records"] as List<BankReconciliationRecordEntity> : null,
        paymentIds: p != null && p["paymentIds"] != null ? p["paymentIds"] as List<int> : null,
      ),
      providerBuilder: (p) => ReconcileAccountConfirmProvider(),
    );
    router.addPRouter<BankReconciliationDetailWithFileProvider>(
      path: bankReconciliationDetailWithFilePage,
      routerWidgetBuilder: (p) => BankReconciliationDetailWithFilePage(
        bank: p != null && p["bank"] != null ? p["bank"] as BankReconciliationEntity : null,
        title: p != null && p["title"] != null ? p["title"] as String : null,
        closingDate: p != null && p["closingDate"] != null ? p["closingDate"] as String : null,
      ),
      providerBuilder: (p) => BankReconciliationDetailWithFileProvider(),
    );
    router.addPRouter<ReconcileAccountRecordDetailProvider>(
      path: reconcileAccountRecordDetailPage,
      routerWidgetBuilder: (p) => ReconcileAccountRecordDetailPage(
        bank: p != null && p["bank"] != null ? p["bank"] as BankReconciliationRecordEntity : null,
        title: p != null && p["title"] != null ? p["title"] as String : null,
        bankId: p != null && p["bankId"] != null ? p["bankId"] as int : null,
      ),
      providerBuilder: (p) => ReconcileAccountRecordDetailProvider(),
    );
    router.addPRouter<AllReportsProvider>(
      path: allReportsPage,
      routerWidgetBuilder: (p) => AllReportsPage(),
      providerBuilder: (p) => AllReportsProvider(),
    );
    router.addPRouter<DateReportProvider>(
      path: dateReportPage,
      routerWidgetBuilder: (p) => DateReportPage(
        type: p != null && p["type"] != null ? p["type"] as int : null,
        line: p != null && p["line"] != null ? p["line"] as TaxSubmissionDetailTaxSubmissionLines : null,
        acceptMode: p != null && p["acceptMode"] != null ? p["acceptMode"] as bool : null,
        canEdit: p != null && p["canEdit"] != null ? p["canEdit"] as bool : null,
        taxes: p != null && p["taxes"] != null ? p["taxes"] as List<TaxSubmissionDetailEntity> : null,
        meta: p != null && p["meta"] != null ? p["meta"] as Map : null,
        lines: p != null && p["lines"] != null ? p["lines"] as List<TaxSubmissionDetailTaxSubmissionLines> : null,
        tax: p != null && p["tax"] != null ? p["tax"] as TaxSubmissionDetailEntity : null,
      ),
      providerBuilder: (p) => DateReportProvider(),
    );
    router.addPRouter<InviteTeamMembersProvider>(
      path: inviteTeamMembersPage,
      routerWidgetBuilder: (p) => InviteTeamMembersPage(
        isSelectManually: p != null && p["isSelectManually"] != null ? p["isSelectManually"] as bool : null,
        isSelectEmployee: p != null && p["isSelectEmployee"] != null ? p["isSelectEmployee"] as bool : null,
        isSelectPhoneBook: p != null && p["isSelectPhoneBook"] != null ? p["isSelectPhoneBook"] as bool : null,
      ),
      providerBuilder: (p) => InviteTeamMembersProvider(),
    );
    router.addPRouter<ManageRoleAccessProvider>(
      path: manageRoleAccessPage,
      routerWidgetBuilder: (p) => ManageRoleAccessPage(),
      providerBuilder: (p) => ManageRoleAccessProvider(),
    );
    router.addPRouter<NewRoleProvider>(
      path: newRolePage,
      routerWidgetBuilder: (p) => NewRolePage(
        data: p != null && p["data"] != null ? p["data"] as RolePermissionEntity : null,
        isDuplicate: p != null && p["isDuplicate"] != null ? p["isDuplicate"] as bool : null,
        isGoBack: p != null && p["isGoBack"] != null ? p["isGoBack"] as bool : null,
      ),
      providerBuilder: (p) => NewRoleProvider(),
    );
    router.addPRouter<WebViewProvider>(
      path: webViewPage,
      routerWidgetBuilder: (p) => WebViewPage(
        title: p != null && p["title"] != null ? p["title"] as String : null,
        url: p != null && p["url"] != null ? p["url"] as String : null,
        isAdd: p != null && p["isAdd"] != null ? p["isAdd"] as bool : null,
      ),
      providerBuilder: (p) => WebViewProvider(),
    );
    router.addPRouter<DashboardProvider>(
      path: dashboardPage,
      routerWidgetBuilder: (p) => DashboardPage(),
      providerBuilder: (p) => DashboardProvider(),
    );
    router.addPRouter<ChatRoomProvider>(
      path: chatRoomPage,
      routerWidgetBuilder: (p) => ChatRoomPage(
        entryPoint: p != null && p["entryPoint"] != null ? p["entryPoint"] as String : null,
      ),
      providerBuilder: (p) => ChatRoomProvider(),
    );
    router.addPRouter<NotificationProvider>(
      path: notificationPage,
      routerWidgetBuilder: (p) => NotificationPage(),
      providerBuilder: (p) => NotificationProvider(),
    );
    router.addPRouter<OCRCameraProvider>(
      path: ocrCameraPage,
      routerWidgetBuilder: (p) => OCRCameraPage(
        activeOCR: p != null && p["activeOCR"] != null ? p["activeOCR"] as bool : null,
        isSelect: p != null && p["isSelect"] != null ? p["isSelect"] as bool : null,
      ),
      providerBuilder: (p) => OCRCameraProvider(),
    );
    router.addPRouter<SplashSecondProvider>(
      path: splashSecondPage,
      routerWidgetBuilder: (p) => SplashSecondPage(),
      providerBuilder: (p) => SplashSecondProvider(),
    );
    router.addPRouter<BarCodeCameraProvider>(
      path: barCodeCameraPage,
      routerWidgetBuilder: (p) => BarCodeCameraPage(),
      providerBuilder: (p) => BarCodeCameraProvider(),
    );
    router.addPRouter<SystemDetectionProvider>(
      path: systemDetectionPage,
      routerWidgetBuilder: (p) => SystemDetectionPage(),
      providerBuilder: (p) => SystemDetectionProvider(),
    );
    router.addPRouter<RequestFreeDemoProvider>(
      path: requestFreeDemoPage,
      routerWidgetBuilder: (p) => RequestFreeDemoPage(),
      providerBuilder: (p) => RequestFreeDemoProvider(),
    );
    router.addPRouter<FixedAssetProvider>(
      path: fixedAssetPage,
      routerWidgetBuilder: (p) => FixedAssetPage(select: p != null && p["select"] != null ? p["select"] as FixedAssetEntity : null),
      providerBuilder: (p) => FixedAssetProvider(),
    );
    router.addPRouter<AssignRoleByBatchProvider>(
      path: assignRoleByBatchPage,
      routerWidgetBuilder: (p) => AssignRoleByBatchPage(),
      providerBuilder: (p) => AssignRoleByBatchProvider(),
    );
    router.addPRouter<DataImportProvider>(
      path: dataImportPage,
      routerWidgetBuilder: (p) => DataImportPage(),
      providerBuilder: (p) => DataImportProvider(),
    );
    router.addPRouter<ContactDataImportProvider>(
      path: importBusinessContactPage,
      routerWidgetBuilder: (p) => ContactDataImportPage(),
      providerBuilder: (p) => ContactDataImportProvider(),
    );
    router.addPRouter<SettingDataImportProvider>(
      path: settingDataImport,
      routerWidgetBuilder: (p) => SettingDataImportPage(),
      providerBuilder: (p) => SettingDataImportProvider(),
    );
    router.addPRouter<SettingDataImportSummaryProvider>(
      path: settingDataImportSummaryPage,
      routerWidgetBuilder: (p) => SettingDataImportSummaryPage(),
      providerBuilder: (p) => SettingDataImportSummaryProvider(p['items'] as List<String>),
    );
    router.addPRouter<ProductsAndServicesDataImportProvider>(
      path: productAndServiceDataImportPage,
      routerWidgetBuilder: (p) => ProductAndServicesDataImportPage(),
      providerBuilder: (p) => ProductsAndServicesDataImportProvider(),
    );
    router.addPRouter<HrAndPayrollDataImportProvider>(
      path: hrAndPayrollDataImportPage,
      routerWidgetBuilder: (p) => HrAndPayrollDataImportPage(),
      providerBuilder: (p) => HrAndPayrollDataImportProvider(),
    );
  }
}
